Tính thuận nghịch Thuật_toán_khóa_đối_xứng

Theo định nghĩa, các hàm số dùng trong mật mã học phải có khả năng đảo ngược (reversible), vì chúng ta cần phải có khả năng vừa mật mã hóa các thông điệp song cũng đồng thời giải mã chúng (với điều kiện chúng ta có chìa khóa đúng của nó).

Trong quá khứ, nhiều phương pháp đã được sử dụng để giải quyết việc này. Trước đây, người ta đã từng dùng sách mật mã - trong đó chìa khóa phân hưởng liên quan đến nội dụng của quyển sách, mật mã khóa tự động - trong đó chìa khóa có thể được suy ra từ một phần của văn bản thuần túy (plaintext), mã đục lỗ (grill) (Có giả thuyết rằng phương pháp này đầu tiên được nhà toán học người Ý Gerolamo Cardano sáng chế)[2], vân vân. Trong thời đại hiện nay, khi máy tính trở nên sẵn có, đa số các phương pháp mật mã đối xứng đều dựa trên cơ sở 'vòng' tuần hoàn (các lượt tính toán được nhắc đi nhắc lại). Thường thì một lượt được nhắc đi nhắc lại nhiều lần, theo một sự bố trí khá đơn giản, như trong ví dụ chung dưới đây. Phương pháp chung này thường được gán cho ông Horst Feistel. Để biết được nội dung có chiều sâu hơn nữa về phương pháp này (với biểu đồ minh họa), xin xem bài về Feistel cipher.

Những bit dùng để mã hóa được phân ra là hai phần, P1 và P2. P1 được giữ nguyên, không thay đổi, P2 được cộng (hay được XOR) với một hàm băm một chiều (one-way hashed function) f (được biến thiên bởi một chìa khóa hay một nhân tố (salt)) của P1. Hai kết quả này sau đó được đổi chỗ cho nhau. Mỗi quá trình này được gọi là 'một lượt' (hay một vòng).

Chẳng hạn với p1, p2, chìa khóa là các vectơ bit; Dấu phẩy (',') là toán tử phép ghép chuỗi và f là ánh xạ từ p 1 , p 2 ↦ p 2 ′ , p 1 {\displaystyle p1,p2\mapsto p2^{\prime },p1} hầu cho:

p 2 ′ = p 2 + f ( p 1 , k e y ) {\displaystyle p2^{\prime }=p2+\mathrm {f} (p1,key)} (key = chìa khóa)

Vì kết quả của lượt tính này vẫn còn cho phép truy cập giá trị của P1, và tính cộng là một phép toán có thể đảo ngược được, cho nên phép toán có thể được hoàn giải, đối với bất cứ một hàm số f nào đấy.

Tuy đã kinh qua một vòng toán, song kết quả của nó vẫn chưa được an toàn cho lắm, vì p1 vẫn còn giữ nguyên giá trị và chưa bị thay đổi, nhưng nếu chúng ta lặp lại phép toán một hoặc nhiều lần, thường là bởi nhiều hàm số khác và với 'các chìa khóa của vòng toán' ('round keys'), thì kết quả sẽ tăng cường tính đảm bảo của nó rất nhiều (greatly improves the strength).

Để giải mã bội số lượt, mỗi lượt phải được giải theo trật tự ngược lại và vì thế, trong khi giải mã, các chìa khóa cũng phải được áp dụng theo trật tự ngược lại.

Sau nhiều lần (đa số là từ 8 đến 64 lần) thi hành, kết quả trở nên bị xáo trộn đến mức, như trong trường hợp khi các mã được thiết kế khá tốt, không có phương pháp giải mã nào nhanh hơn là phương pháp tìm khóa dùng bạo lực (brute force key search)[3] và chỉ có phương pháp này mới có thể giải được.